#include "Comm.hpp"
#include <sys/ipc.h>
#include <sys/shm.h>
 #include <fcntl.h>
#include <stdio.h>

InitFifo init;

int main()
{
    int key= ftok(FTOK_PATH, PROJ_ID);

    int shmid= shmget(key, 4096, IPC_CREAT| IPC_EXCL |0664);

    char* p= (char*)shmat(shmid, nullptr, 0);

    int rfd= open("fifo", O_RDONLY);//阻塞直到客户端去打开命名管道写端
    while(1)
    {
        int tmp;
        int n= read(rfd, &tmp, 4);//利用命名管道实现共享内存的同步

        if(n>0)
        {
            printf("客户端说：%s\n",p);
        }
        else if(n== 0)
        {
            printf("客户端将命名管道写端关闭了，那也就说明不再往共享内存中写数据了,我也关闭命名管道读端，并释放共享内存\n");
            break;
        }
        else
        {

        }
    }

    close(rfd);//命名管道的路径结构由全局变量的析构函数负责

    shmdt(p);
    shmctl(shmid, IPC_RMID,nullptr);

    return 0;
}